/*
 * @Description: 
 * @Author: rendc
 * @Date: 2025-09-02 14:09:43
 * @LastEditors: rendc
 * @LastEditTime: 2025-09-02 14:49:42
 */
/*
 * @Description: 
 * @Author: rendc
 * @Date: 2025-09-02 11:37:53
 * @LastEditors: rendc
 * @LastEditTime: 2025-09-02 14:09:43
 */

package com.briup;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

import org.junit.Test;

public class LoginTest {
  // 数据库连接四要素
  // 驱动
  String driverClass = "com.mysql.cj.jdbc.Driver";
  // 数据库地址
  String url = "jdbc:mysql://127.0.0.1:3306/briup";
  // 数据库的用户名
  String username = "briup"; // 用户名
  // 数据库的用户密码
  String password = "briup"; // 密码

  // 定义方法，去查询数据 - 可以 sql注入
  @Test
  public void Login() {
    // 创建数据库驱动
    Connection conn = null;
    // 创建数据库操作对象
    Statement stmt = null;
    try {
      // 模拟的是用户输入的账号密码
      String userName = "briup1";
      String passWord = "' OR '1' = '1";
      // 1. 注册驱动
      Class.forName(driverClass);
      // 2. 获取数据库连接对象
      conn = DriverManager.getConnection(url, username, password);
      // 3. 获取数据库操作对象（ Statement 类型或者子类型对象）
      stmt = conn.createStatement();
      // 4. 执行sql语句
      String sql = "select * " +
          "from t_user " +
          "where name = '" + userName +
          "' and password = '" + passWord + "';";
      System.out.println("sql:" + sql);
      // 执行查询语句 executeQuery
      // 执行 DDL DML语句 executeUpdate
      ResultSet rs = stmt.executeQuery(sql);
      // 5. 处理结果集（如果需要的话，一般查询语句必须要处理）
      // System.out.println("返回结果：" + rs);
      while (rs.next()) {
        // 通过判断返回的结果集中有没有数据来判断能否登录成功
        int id = rs.getInt(1);
        System.out.println("id:" + id);
        System.out.println("登录成功");
      }
      // 数据读取完毕
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      // 6. 释放资源
      // 关闭前面打开的资源
      if (stmt != null) {
        try {
          stmt.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
      if (conn != null) {
        try {
          conn.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
  }

  // 预编译sql 提升效率 防止sql注入
  @Test
  public void PreparedLogin() {
    // 创建数据库驱动
    Connection conn = null;
    // 创建数据库操作对象
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
      // 模拟的是用户输入的账号密码
      String userName = "briup";
      String passWord = "briup";
      // 1. 注册驱动
      Class.forName(driverClass);
      // 2. 获取数据库连接对象
      conn = DriverManager.getConnection(url, username, password);
      // 准备sql语句
      String sql = "select * " +
          "from t_user " +
          "where name = ? and password = ?";
      System.out.println("sql:" + sql);
      // 3. 获取数据库操作对象（ prepareStatement） 预编译sql
      pstmt = conn.prepareStatement(sql);
      // 4. 执行sql语句
      // 4.1 设置sql参数值
      pstmt.setString(1, userName);
      pstmt.setString(2, passWord);
      // 4.2 按照指定的参数执行sql语句
      rs = pstmt.executeQuery();
      // 5. 处理结果集（如果需要的话，一般查询语句必须要处理）
      // System.out.println("返回结果：" + rs);
      while (rs.next()) {
        // 通过判断返回的结果集中有没有数据来判断能否登录成功
        int id = rs.getInt(1);
        System.out.println("id:" + id);
        System.out.println("登录成功");
      }
      // 数据读取完毕
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      // 6. 释放资源
      // 关闭前面打开的资源
      if (rs != null) {
        try {
          rs.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
      if (pstmt != null) {
        try {
          pstmt.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
      if (conn != null) {
        try {
          conn.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
  }

}